home *** CD-ROM | disk | FTP | other *** search
/ Multimedia Jumpstart / Multimedia Microsoft Jumpstart Version 1.1a (Microsoft).BIN / develpmt / sdk / vfw11.win / vfwdk / handler.h_ / handler.bin
Encoding:
Text File  |  1993-11-19  |  7.0 KB  |  229 lines

  1.  
  2. /**************************************************************************
  3.  *
  4.  *  THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
  5.  *  KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  6.  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
  7.  *  PURPOSE.
  8.  *
  9.  *  Copyright (c) 1992, 1993  Microsoft Corporation.  All Rights Reserved.
  10.  * 
  11.  **************************************************************************/
  12.  
  13. // Comment out the following line to disable the custom marshalling code....
  14. #define CUSTOMMARSHAL
  15.  
  16. #ifdef CUSTOMMARSHAL
  17. #include <storage.h>
  18. #endif
  19.  
  20. /*    -    -    -    -    -    -    -    -    */
  21.  
  22. #define    CFactoryImpl    CI    // MSC7 Can't handle long exported names
  23. #define    CAVIFileImpl    CF    // MSC7 Can't handle long exported names
  24. #define    CAVIStreamImpl    CS    // MSC7 Can't handle long exported names
  25.  
  26. /* Remove warning of using object during initialization. */
  27. #pragma warning(disable:4355)
  28.  
  29. /*    -    -    -    -    -    -    -    -    */
  30.  
  31. #define    implement    struct
  32. #define    implementations    private
  33.  
  34. /*
  35. ** _StdClassImplementations
  36. ** Defines the standard implementations for a class object.
  37. */
  38.  
  39. #define    _StdClassImplementations(Impl)    \
  40.     STDMETHODIMP QueryInterface(const IID FAR& riid, void FAR* FAR* ppv);    \
  41.     STDMETHODIMP_(ULONG) AddRef();    \
  42.     STDMETHODIMP_(ULONG) Release()
  43.  
  44.  
  45. /*    -    -    -    -    -    -    -    -    */
  46.  
  47. class FAR CAVIFileCF : IClassFactory {
  48. public:
  49.     static HRESULT Create(const CLSID FAR& rclsid, const IID FAR& riid, void FAR* FAR* ppv);
  50. private:
  51.     CAVIFileCF(const CLSID FAR& rclsid, IUnknown FAR* FAR* ppUnknown);
  52.     _StdClassImplementations(CFactoryImpl);
  53.     CFactoryImpl(CAVIFileCF FAR* pAVIFileCF);
  54.     STDMETHODIMP CreateInstance(IUnknown FAR* pUnknownOuter, const IID FAR& riid, void FAR* FAR* ppv);
  55.     STDMETHODIMP LockServer(BOOL fLock);
  56.  
  57.     ULONG    m_refs;
  58.     CLSID    m_clsid;
  59. };
  60.  
  61. /*    -    -    -    -    -    -    -    -    */
  62.  
  63. class FAR CAVIFile {
  64. public:
  65.     static HRESULT Create(IUnknown FAR* pUnknownOuter, const IID FAR& riid, void FAR* FAR* ppv);
  66.     HRESULT NEAR PASCAL LoadFrame(LONG lPos);
  67.     HRESULT NEAR PASCAL WriteFrame(LONG lPos, LPVOID lp, LONG cb);
  68.     
  69. private:
  70.     CAVIFile(IUnknown FAR* pUnknownOuter, IUnknown FAR* FAR* ppUnknown);
  71.     
  72. implementations:
  73.     implement CUnknownImpl : IUnknown {
  74.     public:
  75.     _StdClassImplementations(CUnknownImpl);
  76.     CUnknownImpl(CAVIFile FAR* pAVIFile);
  77.     private:
  78.     CAVIFile FAR*    m_pAVIFile;
  79.     ULONG    m_refs;
  80.     };
  81.     implement CAVIFileImpl : IAVIFile {
  82.     public:
  83.     _StdClassImplementations(CAVIFileImpl);
  84.     CAVIFileImpl(CAVIFile FAR* pAVIFile);
  85.     ~CAVIFileImpl();
  86.     STDMETHODIMP Open            (THIS_
  87.                      LPCSTR szFile,
  88.                      UINT mode);
  89.     STDMETHODIMP Info                 (THIS_
  90.                      AVIFILEINFO FAR * pfi,
  91.                      LONG lSize);
  92.     STDMETHODIMP GetStream            (THIS_
  93.                      PAVISTREAM FAR * ppStream,
  94.                      DWORD fccType,
  95.                      LONG lParam);
  96.     STDMETHODIMP CreateStream         (THIS_
  97.                      PAVISTREAM FAR * ppStream,
  98.                      AVISTREAMINFO FAR * psi);
  99.     STDMETHODIMP Save                 (THIS_
  100.                      LPCSTR szFile,
  101.                      AVICOMPRESSOPTIONS FAR *lpOptions,
  102.                      AVISAVECALLBACK lpfnCallback);
  103.     STDMETHODIMP WriteData            (THIS_
  104.                      DWORD ckid,
  105.                      LPVOID lpData,
  106.                      LONG cbData);
  107.     STDMETHODIMP ReadData             (THIS_
  108.                      DWORD ckid,
  109.                      LPVOID lpData,
  110.                      LONG FAR *lpcbData);
  111.     STDMETHODIMP EndRecord            (THIS);
  112.     STDMETHODIMP Reserved1            (THIS);
  113.     STDMETHODIMP Reserved2            (THIS);
  114.     STDMETHODIMP Reserved3            (THIS);
  115.     STDMETHODIMP Reserved4            (THIS);
  116.     STDMETHODIMP Reserved5            (THIS);
  117.     private:
  118.     // private functions here?
  119.     CAVIFile FAR*    m_pAVIFile;
  120.     };
  121.     implement CAVIStreamImpl : IAVIStream {
  122.     public:
  123.     _StdClassImplementations(CAVIStreamImpl);
  124.     CAVIStreamImpl(CAVIFile FAR* pAVIFile);
  125.     ~CAVIStreamImpl();
  126.     STDMETHODIMP Create      (THIS_ LPARAM lParam1, LPARAM lParam2);
  127.     STDMETHODIMP Info        (THIS_ AVISTREAMINFO FAR * psi, LONG lSize);
  128.     STDMETHODIMP_(LONG) FindSample (THIS_ LONG lPos, LONG lFlags);
  129.     STDMETHODIMP ReadFormat  (THIS_ LONG lPos,
  130.                 LPVOID lpFormat, LONG FAR *cbFormat);
  131.     STDMETHODIMP SetFormat   (THIS_ LONG lPos,
  132.                 LPVOID lpFormat, LONG cbFormat);
  133.     STDMETHODIMP Read        (THIS_ LONG lStart, LONG lSamples,
  134.                 LPVOID lpBuffer, LONG cbBuffer,
  135.                 LONG FAR * plBytes, LONG FAR * plSamples);
  136.     STDMETHODIMP Write       (THIS_ LONG lStart, LONG lSamples,
  137.                   LPVOID lpBuffer, LONG cbBuffer,
  138.                   DWORD dwFlags,
  139.                   LONG FAR *plSampWritten,
  140.                   LONG FAR *plBytesWritten);
  141.     STDMETHODIMP Delete      (THIS_ LONG lStart, LONG lSamples);
  142.     STDMETHODIMP ReadData    (THIS_ DWORD fcc, LPVOID lp, LONG FAR *lpcb);
  143.     STDMETHODIMP WriteData   (THIS_ DWORD fcc, LPVOID lp, LONG cb);
  144.     STDMETHODIMP Reserved1            (THIS);
  145.     STDMETHODIMP Reserved2            (THIS);
  146.     STDMETHODIMP Reserved3            (THIS);
  147.     STDMETHODIMP Reserved4            (THIS);
  148.     STDMETHODIMP Reserved5            (THIS);
  149.     private:
  150.     // private functions here?
  151.     CAVIFile FAR*    m_pAVIFile;
  152.     };
  153. #ifdef CUSTOMMARSHAL
  154.     implement CMarshalImpl : IMarshal {
  155.     public:
  156.     _StdClassImplementations(CMarshalImpl);
  157.     CMarshalImpl(CAVIFile FAR* pAVIFile);
  158.     // *** IMarshal methods ***
  159.     STDMETHODIMP GetUnmarshalClass (THIS_ REFIID riid, LPVOID pv, 
  160.                 DWORD dwDestContext, LPVOID pvDestContext,
  161.                 DWORD mshlflags, LPCLSID pCid);
  162.     STDMETHODIMP GetMarshalSizeMax (THIS_ REFIID riid, LPVOID pv, 
  163.                 DWORD dwDestContext, LPVOID pvDestContext,
  164.                 DWORD mshlflags, LPDWORD pSize);
  165.     STDMETHODIMP MarshalInterface (THIS_ LPSTREAM pStm, REFIID riid,
  166.                 LPVOID pv, DWORD dwDestContext, LPVOID pvDestContext,
  167.                 DWORD mshlflags);
  168.     STDMETHODIMP UnmarshalInterface (THIS_ LPSTREAM pStm, REFIID riid,
  169.                 LPVOID FAR* ppv);
  170.     STDMETHODIMP ReleaseMarshalData (THIS_ LPSTREAM pStm);
  171.     STDMETHODIMP DisconnectObject (THIS_ DWORD dwReserved);
  172.     private:
  173.     CAVIFile FAR*   m_pAVIFile;
  174.     };
  175. #endif
  176. public:
  177.     CUnknownImpl    m_Unknown;
  178.     CAVIFileImpl    m_AVIFile;
  179.     CAVIStreamImpl    m_AVIStream;
  180. #ifdef CUSTOMMARSHAL
  181.     CMarshalImpl    m_Marshal;
  182. #endif
  183. public:
  184.     IUnknown FAR*    m_pUnknownOuter;
  185.     
  186.     //
  187.     //  DIB Sequence instance data
  188.     //
  189.     DWORD    dwFirstFrame;
  190.     DWORD    dwMaxValue;
  191. #ifndef    _MAX_PATH
  192.     #define        _MAX_PATH        260    
  193. #else
  194.     #if            _MAX_PATH != 260    // Error check
  195.         #error
  196.     #endif
  197. #endif
  198.     char    achFilenameTemplate[_MAX_PATH];
  199.     LONG    lCurFrame;
  200.     AVIFILEINFO    finfo;
  201.     AVISTREAMINFO sinfo;
  202.  
  203.     BOOL    fStreamPresent;
  204.     LPVOID    lpFormat;       // stream format
  205.     LONG    cbFormat;
  206.     LONG    cbFormatBuffer;
  207.     LPVOID    lpFrame;
  208.     LONG    cbFrame;
  209.     LONG    cbFrameBuffer;
  210.     BOOL    fDirty;
  211.     UINT    mode;
  212. };
  213.  
  214. /*    -    -    -    -    -    -    -    -    */
  215.  
  216. /*
  217. ** The usage counter keeps track of the overall usage of objects based on
  218. ** implementations provided by the component. This allows one to determine
  219. ** when the implementation is no longer in use.
  220. */
  221.  
  222. extern UINT    uUseCount;
  223. extern BOOL    fLocked;
  224.  
  225. /*    -    -    -    -    -    -    -    -    */
  226.  
  227.  
  228. DEFINE_AVIGUID(CLSID_DIBSEQFileReader,           0x00020006, 0, 0);
  229.